<?php
/////////////////////////////////////////////////////////////////////////////
// FleaPHP Framework
//
// Copyright (c) 2005 - 2008 QeeYuan China Inc. (http://www.qeeyuan.com)
//
// 许可协议，请查看源代码中附带的 LICENSE.txt 文件，
// 或者访问 http://www.fleaphp.org/ 获得详细信息。
/////////////////////////////////////////////////////////////////////////////

/**
 * 定义 Controller_BoBase 类
 *
 * @copyright Copyright (c) 2005 - 2008 QeeYuan China Inc. (http://www.qeeyuan.com)
 * @author 起源科技 (www.qeeyuan.com)
 * @package Example
 * @subpackage SHOP
 * @version $Id: BoBase.php 972 2007-10-09 20:56:54Z qeeyuan $
 */

/**
 * Controller_BoBase 是后台控制器的基类，提供一些公共方法
 *
 * @package Example
 * @subpackage SHOP
 * @author 起源科技 (www.qeeyuan.com)
 * @version 1.0
 */
class Controller_BoBase extends FLEA_Controller_Action
{
	
	public $_sessionKey;//角色控制中 session 的键值
	
	
    /**
     * 构造函数
     *
     * 负责根据用户的 session 设置载入语言文件
     *
     * @return Controller_BoBase
     */
    function Controller_BoBase() {
        if (isset($_SESSION['LANG'])) {
            $lang = $_SESSION['LANG'];
            $languages = FLEA::getAppInf('languages');
            if (in_array($lang, $languages, true)) {
                FLEA::setAppInf('defaultLanguage', $lang);
            }
        }
        $this->_sessionKey = FLEA::getAppInf('RBACSessionKey');//获取在 session 中角色控制的键名@LITONG
        load_language('ui, exception');
    }

    /**
     * 根据数据表的元数据返回一个数组，这个数组包含所有需要初始化的数据，可以用于界面显示
     *
     * @param array $meta
     *
     * @return array
     */
    function _prepareData(& $meta) {
        $data = array();
        foreach ($meta as $m) {
            if (isset($_POST[$m['name']])) {
                $data[$m['name']] = $_POST[$m['name']];
            } else {
                if (isset($m['defaultValue'])) {
                    $data[$m['name']] = $m['defaultValue'];
                } else {
                    $data[$m['name']] = null;
                }
            }
        }
        return $data;
    }

    /**
     * 返回用 _setBack() 设置的 URL
     */
    function _goBack() {
        $url = $this->_getBack();
        unset($_SESSION['BACKURL']);
        redirect($url);
    }

    /**
     * 设置返回点 URL，稍后可以用 _goBack() 返回
     */
    function _setBack() {
        $_SESSION['BACKURL'] = encode_url_args($_GET);
    }

    /**
     * 获取返回点 URL
     *
     * @return string
     */
    function _getBack() {
        if (isset($_SESSION['BACKURL'])) {
            $url = $this->rawurl($_SESSION['BACKURL']);
        } else {
            $url = $this->_url();
        }
        return $url;
    }

    /**
     * 直接提供查询字符串，生成 URL 地址
     *
     * @param string $queryString
     *
     * @return string
     */
    function rawurl($queryString) {
    	if (substr($queryString, 0, 1) == '?') {
    		$queryString = substr($queryString, 1);
    	}
    	return $_SERVER['SCRIPT_NAME'] . '?' . $queryString;
    }
    
    /**
     * 查询用户权限
     *
     * @param string $queryString
     *
     * @return string
     */
    function checkDispatcher($queryString) {
    	$flag = false;

    	if($_SESSION[$this->_sessionKey] && $_SESSION[$this->_sessionKey]['POWER']){
    		$arr = explode(',',$_SESSION[$this->_sessionKey]['POWER']);
    		$flag = in_array($queryString,$arr);
    		return $flag;
    	}else{ 
    		redirect(url('BoLogin','Index'));
    		return true;
    	}

    }

    
    /**
     * 从 session 中获取保存的用户数据@LITONG
     *
     * @return array
     */
    function getUser()
    {
        return isset($_SESSION[$this->_sessionKey]) ?
                $_SESSION[$this->_sessionKey] :
                null;;
    }
    
    /**
     * 内容html的处理
     *
     * @param unknown_type $out
     * @param unknown_type $_quota
     * @return unknown
     */
    function stripHtml($out,$_quota = false)
    {
    	if (is_array($out)) {
    		foreach ($out as $c_key => $c_val) {
    			$out[$c_key] = $this->stripHtml($c_val,$_quota);
    		}
    	}
    	else {
    		$out = preg_replace("'<script[^>]*?>.*?</script>'si",'',$out);
    		if (isset($_quota['quota_editor']) && $_quota['quota_editor'] == 'yes') {
    			return($out);
    		}
    		$allw = '';
    		if ($_quota['quota_html'] == 'yes' && strlen($_quota['quota_htmltags']) > 0) {
    			$_all = explode('|',$_quota['quota_htmltags']);
    			if (is_array($_all)) {
    				foreach ($_all as $tag) {
    					$allw .= "<{$tag}>";
    				}
    			}
    		}
    		if (strlen($allw) > 0) {
    			$out = strip_tags($out,$allw);
    		}
    		else {
    			$out = strip_tags($out);
    		}
    	}
    	return($out);
    }
    
    protected function Dofile($filename,$file_contents){
    	// 在这个例子里，我们将使用添加模式打开$filename，
		// 因此，文件指针将会在文件的开头，
		// 那就是当我们使用fwrite()的时候，$somecontent将要写入的地方。
		if (!$handle = fopen($filename, 'w')) {
			return "操作" . $filename . "失败";
			exit;
		}

		// 将$file_contents写入到我们打开的文件中。
		if (fwrite($handle, $file_contents) === FALSE) {
			return "can not write into $filename";
			return "操作" . $filename . "失败";
			exit;
		}
		
		fclose($handle);
		
		return null;
		
    }
    
	//处理图片上传
	protected function _uploadPicture($upfile) {
		$uploader = & FLEA::getSingleton ( 'FLEA_Helper_FileUploader' );		
		$errorMessage = "";
		if ($uploader->isFileExist ( $upfile )) {
			$file = & $uploader->getFile ( $upfile );
			if (! $file->check ( FLEA::getAppInf ( 'photoFileExts' ) )) {
				$errorMessage['error'] = '文件类型错误';
			}else{
				__TRY ();
				$filetype = $file->getExt ();
				$filename = $this->uploadPhoto ( $file, $filetype );
				$ex = __CATCH ();
//				var_dump(__IS_EXCEPTION ( $ex ));
				if (__IS_EXCEPTION ( $ex )) {
					$errorMessage['error'] = $ex->getMessage();
					break;
				} else{
					$errorMessage ['filename'] = $filename;
				}
			}			
		}		
		return $errorMessage;
	}    
  	//生成图片文件名
    protected function uploadPhoto(&$file,$type) {
        $filename = 'guoguo' . time() . '.' . $type;        
        $file->move(FLEA::getAppInf('uploadDir') . DS . $filename);
        return $filename;
    }
    
    function getError(){
    	//出错页
    	$this->_executeView(TPL_DIR . '/error.php');
    }
	//转义
    function addsla($str){
    	return get_magic_quotes_gpc()?$str:addslashes($str);
    }
	//用php自带的mail函数发送邮件
	function sentEmail($email,$name,$title,$content){
		$headers = 'Content-type: text/html; charset=utf8' . "\r\n";
		$headers .= 'From: Sales@thesourcingdepot.com' . "\r\n" . 'Reply-To: Sales@thesourcingdepot.com' . "\r\n";
		if($email != 'Sales@thesourcingdepot.com')$headers .= "BCC: Sales@thesourcingdepot.com";
		$title = iconv('utf8','gbk',$title);
		$result = mail($email,$title, $content,$headers);
		return $result;
	}
}
